<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html lang="en">
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="created" content="2018-10-23T06:18:10.521000000">
    <meta name="changed" content="2018-10-23T06:18:42.262000000">
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <meta http-equiv="Content-Language" content="en">
    <title>
      Library Class
    </title>
    <link rel="stylesheet" type="text/css" href="../../style.css">
  </head>
  <body>
    <div class=codediv>
      <h1>
        Library Class
      </h1>
      <p>
        The access point for the JAR library is a class that extends the <code>Library</code> class. The library's main job is to list the tools that are available through the library; most often, the tools are all tools to add the various components defined - that is, instances of the <code>AddTool</code> class working with different component factories.
      </p>
      <h2>
        Components
      </h2>
      <pre>package com.cburch.gray;

import java.util.Arrays;
import java.util.List;

import com.cburch.logisim.tools.AddTool;
import com.cburch.logisim.tools.Library;

/** The library of components that the user can access. */
public class Components extends Library {
    /** The list of all tools contained in this library. Technically,
     * libraries contain tools, which is a slightly more general concept
     * than components; practically speaking, though, you'll most often want
     * to create AddTools for new components that can be added into the circuit.
     */
    private List&lt;AddTool&gt; tools;
    
    /** Constructs an instance of this library. This constructor is how
     * Logisim accesses first when it opens the JAR file: It looks for
     * a no-arguments constructor method of the user-designated class.
     */
    public Components() {
        tools = Arrays.asList(new AddTool[] {
                new AddTool(new GrayIncrementer()),
                new AddTool(new SimpleGrayCounter()),
                new AddTool(new GrayCounter()),
        });
    }
    
    /** Returns the name of the library that the user will see. */ 
    public String getDisplayName() {
        return "Gray Tools";
    }
    
    /** Returns a list of all the tools available in this library. */
    public List&lt;AddTool&gt; getTools() {
        return tools;
    }
}
</pre>
      <p>
        <b>Next:</b> <a href="simpctr.html">Simple Gray Code Counter</a>.
      </p>
    </div>
  </body>
</html>
